package com.recruit.business.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.recruit.common.common.mybatis.Page;
import com.recruit.common.common.util.PageUtil;
import com.recruit.common.dto.friLink.CreateOrUpdateFriLinkDTO;
import com.recruit.common.model.FriLinkDO;
import com.recruit.common.service.FriLinkService;
import com.recruit.common.vo.CreatedVO;
import com.recruit.common.vo.DeletedVO;
import com.recruit.common.vo.PageResponseVO;
import com.recruit.common.vo.UpdatedVO;
import io.github.talelin.autoconfigure.exception.NotFoundException;
import io.github.talelin.core.annotation.GroupRequired;
import io.github.talelin.core.annotation.Logger;
import io.github.talelin.core.annotation.PermissionMeta;
import io.github.talelin.core.annotation.PermissionModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Positive;
import java.util.ArrayList;
import java.util.List;


/**
* @author Eval
* @since 2022-04-04
*/
@RestController
@RequestMapping("/recruit/friLink")
@PermissionModule(value = "系统内容管理")
public class FriLinkController {

    @Autowired
    private FriLinkService friLinkService;

    /**
     * 新增友情链接
     * @param validator
     * @return
     */
    @Logger(template = "新增友情链接")
    @PostMapping("")
    @GroupRequired
    @PermissionMeta(value = "新增友情链接")
    public CreatedVO create(@RequestBody @Validated CreateOrUpdateFriLinkDTO validator) {

        List<FriLinkDO> friLinkList = friLinkService.getAll();
        for (FriLinkDO  fdo: friLinkList) {
            if(fdo.getTitle().equals(validator.getTitle())) {
                throw new NotFoundException("该标题的友情链接已经存在，请更换后重试");
            }
            if(fdo.getUrl().equals(validator.getUrl())) {
                throw new NotFoundException("该URL的友情链接已经存在，请更换后重试");
            }
        }
        friLinkService.createFriLink(validator);
        return new CreatedVO(8000);
    }

    /**
     * 更新友情链接信息
     * @param id
     * @return
     */
    @Logger(template = "更新友情链接")
    @PutMapping("/{id}")
    @GroupRequired
    @PermissionMeta(value = "更新友情链接")
    public UpdatedVO update(@PathVariable @Positive(message = "{id.positive}") Integer id, @RequestBody @Validated CreateOrUpdateFriLinkDTO validator) {
        FriLinkDO friLinkDO = friLinkService.getById(id);
        if (friLinkDO == null) {
            throw new NotFoundException(80000);
        }
        friLinkService.updateFriLink(friLinkDO, validator);
        return new UpdatedVO(8100);
    }

    /**
     * 根据id删除友情链接
     * @param id
     * @return
     */
    @Logger(template = "删除友情链接")
    @DeleteMapping("/{id}")
    @GroupRequired
    @PermissionMeta(value = "删除友情链接")
    public DeletedVO delete(@PathVariable @Positive(message = "{id.positive}") Integer id) {
        FriLinkDO friLinkDO  = friLinkService.getById(id);
        if (friLinkDO == null) {
            throw new NotFoundException(80000);
        }
        friLinkService.deleteById(friLinkDO.getId());
        return new DeletedVO(8200);
    }

    /**
     * 根据id查询友情链接信息
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public FriLinkDO get(@PathVariable(value = "id") @Positive(message = "{id.positive}") Integer id) {
        FriLinkDO friLinkDO = friLinkService.getById(id);
        if (friLinkDO == null) {
            throw new NotFoundException(80000);
        }
        return friLinkDO;
    }

    /**
     * 查询所有友情链接
     * @return
     */
    @GetMapping("")
    public List<FriLinkDO> getAll() {
        List<FriLinkDO> friLinkDOS = friLinkService.getAll();
        if (friLinkDOS == null || friLinkDOS.size() == 0) {
            throw new NotFoundException(81000);
        }
        return friLinkDOS;
    }

    /**
     * 查询所有友情链接
     * @return
     */
    @RequestMapping(value="/ct",produces="application/json;charset=UTF-8")
    @ResponseBody
    public List<List<String>> ct() {
        List<List<String>> s = new ArrayList<List<String>>();
        List<String> l10 = new ArrayList<String>();l10.add("Income");l10.add("Life Expectancy");l10.add("Population");l10.add("Country");l10.add("Year");
        List<String> l11 = new ArrayList<String>();l11.add("11");l11.add("111");l11.add("11");l11.add("Country11");l11.add("1111");
        List<String> l12 = new ArrayList<String>();l12.add("12");l12.add("121");l12.add("12");l12.add("Country12");l12.add("1212");
        List<String> l13 = new ArrayList<String>();l13.add("13");l13.add("131");l13.add("13");l13.add("Country13");l13.add("1313");
        List<String> l14 = new ArrayList<String>();l14.add("14");l14.add("141");l14.add("14");l14.add("Country14");l14.add("1414");
        List<String> l15 = new ArrayList<String>();l15.add("15");l15.add("151");l15.add("15");l15.add("Country15");l15.add("1515");
        List<String> l16 = new ArrayList<String>();l16.add("16");l16.add("161");l16.add("16");l16.add("Country16");l16.add("1616");
        List<String> l17 = new ArrayList<String>();l17.add("17");l17.add("171");l17.add("17");l17.add("Country17");l17.add("1717");
        List<String> l18 = new ArrayList<String>();l18.add("18");l18.add("181");l18.add("18");l18.add("Country18");l18.add("1818");
        List<String> l19 = new ArrayList<String>();l19.add("19");l19.add("191");l19.add("19");l19.add("Country19");l19.add("1919");
        List<String> l20 = new ArrayList<String>();l20.add("20");l20.add("202");l20.add("20");l20.add("Country20");l20.add("2020");
        List<String> l21 = new ArrayList<String>();l21.add("21");l21.add("212");l21.add("21");l21.add("Country21");l21.add("2121");
        List<String> l22 = new ArrayList<String>();l22.add("22");l22.add("222");l22.add("22");l22.add("Country22");l22.add("2222");
        List<String> l23 = new ArrayList<String>();l23.add("23");l23.add("232");l23.add("23");l23.add("Country23");l23.add("2323");
        List<String> l24 = new ArrayList<String>();l24.add("24");l24.add("242");l24.add("24");l24.add("Country24");l24.add("2424");
        List<String> l25 = new ArrayList<String>();l25.add("25");l25.add("252");l25.add("25");l25.add("Country25");l25.add("2525");
        List<String> l26 = new ArrayList<String>();l26.add("26");l26.add("262");l26.add("26");l26.add("Country26");l26.add("2626");
        List<String> l27 = new ArrayList<String>();l27.add("27");l27.add("272");l27.add("27");l27.add("Country27");l27.add("2727");
        List<String> l28 = new ArrayList<String>();l28.add("28");l28.add("282");l28.add("28");l28.add("Country28");l28.add("2828");
        List<String> l29 = new ArrayList<String>();l29.add("29");l29.add("292");l29.add("29");l29.add("Country29");l29.add("2929");
        List<String> l30 = new ArrayList<String>();l30.add("30");l30.add("303");l30.add("30");l30.add("Country30");l30.add("3030");
        List<String> l31 = new ArrayList<String>();l31.add("31");l31.add("313");l31.add("31");l31.add("Country31");l31.add("3131");
        List<String> l32 = new ArrayList<String>();l32.add("32");l32.add("323");l32.add("32");l32.add("Country32");l32.add("3232");
        List<String> l33 = new ArrayList<String>();l33.add("33");l33.add("333");l33.add("33");l33.add("Country33");l33.add("3333");
        List<String> l34 = new ArrayList<String>();l34.add("34");l34.add("343");l34.add("34");l34.add("Country34");l34.add("3434");
        List<String> l35 = new ArrayList<String>();l35.add("35");l35.add("353");l35.add("35");l35.add("Country35");l35.add("3535");

        s.add(l10);
        s.add(l11);
        s.add(l12);
        s.add(l13);
        s.add(l14);
        s.add(l15);
        s.add(l16);
        s.add(l17);
        s.add(l18);
        s.add(l19);
        s.add(l20);
        s.add(l21);
        s.add(l22);
        s.add(l23);
        s.add(l24);
        s.add(l25);
        s.add(l26);
        s.add(l27);
        s.add(l28);
        s.add(l29);
        s.add(l30);
        s.add(l31);
        s.add(l32);
        s.add(l33);
        s.add(l34);
        s.add(l35);

      return s;
    }

    /**
     * 分页查询所有友情链接列表
     * @param count
     * @param page
     * @return
     */
    @Logger(template = "查看友情链接列表")
    @GetMapping("/page")
    @GroupRequired
    @PermissionMeta(value = "查看友情链接列表")
    public PageResponseVO<FriLinkDO> page(
            @RequestParam(name = "count", required = false, defaultValue = "10")
            @Min(value = 1, message = "{page.count.min}")
            @Max(value = 30, message = "{page.count.max}") Integer count,
            @RequestParam(name = "page", required = false, defaultValue = "0")
            @Min(value = 0, message = "{page.number.min}") Integer page
    ) {
        Page<FriLinkDO> pager = new Page<>( page,count);
        IPage<FriLinkDO> paging = friLinkService.getBaseMapper().selectPage(pager, null);
        return PageUtil.build(paging);
    }

    /**
     * 查询部分友情链接用于首页展示
     * @return
     */
    @GetMapping("/show")
    public List<FriLinkDO> show() {
        List<FriLinkDO> friLinkDOS = friLinkService.show();
        if (friLinkDOS == null || friLinkDOS.size() == 0) {
            throw new NotFoundException(81000);
        }
        return friLinkDOS;
    }
}
